import type { Dayjs } from 'dayjs';

import type { PageParam, PageResult } from '@vben/request';

import { requestClient } from '#/api/request';

export namespace SchoolApi {
  /** 学校简介信息 */
  export interface SchoolIntroduce {
    schoolId: string; // 学校id同组织表的org_id
    briefIntroduction: string; // 学校简介（富文本）
    coverAnArea: number; // 占地面积 单位平方米
    floorSpace: number; // 总建筑面积 单位平方米
    schoolPhoto: string; // 学校照片
    schoolFloorPlan: string; // 学校平面图
    homeUrl: string; // 学校主页地址
    headcountNum: number; // 核定编制人数
    facultyStaffNum: number; // 教职工数量
    leaderNum: number; // 领导数
    teachersNum: number; // 专任教师数(在编)
    employTeachersNum: number; // 聘用教师数
    temporaryTeachersNum: number; // 临时教师数（代课老师）
    securityNum: number; // 安全保卫人数
    retireNum: number; // 退休人数
    studentsNum: number; // 在校学生数量
    enrollmentAreaUrl: string; // 招生区域图片url
    enrollmentAreaLocation: string; // 招生区域经纬度
    enrollmentScope: string; // 招生范围
    lanDomain: string; // 校园(局域)网域名
  }

  /** 学校信息信息 */
  export interface School {
    id: string; // 学校id
    historySchoolId: string; // 历史数据的学校id
    schoolNum: string; // 学校代码
    schoolName?: string; // 学校名称
    schoolNameEnglish: string; // 学校英文名
    shortName: string; // 学校简称
    schoolAddress: string; // 学校地址
    schoolLocation: string; // 学校所在位置:经纬度
    provinceCode: number; // 学校所在省代码
    provinceName: string; // 学校所在省名称
    cityCode: number; // 学校所在市代码
    cityName: string; // 学校所在市名称
    countyCode: number; // 学校所在区县代码
    countyName: string; // 学校所在区县名称
    streetCode: number; // 学校所在街道代码
    streetName: string; // 学校所在街道名称
    masterUnitId: number; // 主管教育行政部门id
    masterUnitCode: string; // 主管教育行政部门代码
    masterUnit: string; // 主管教育行政部门名称
    areaCode: number; // 业务主管教育行政部门区划码
    areaName: string; // 业务主管教育行政部门名称
    territoryUnitId: number; // 属地教育行政部门id
    territoryUnitCode: string; // 属地教育行政部门代码
    territoryUnit: string; // 属地教育行政部门名称
    holdCode: string; // 学校举办者码
    educationalEntity: string; // 办学主体代码
    schoolType?: string; // 学校办学类型
    schoolNature?: number; // 学校性质(0公办 1民办 2 民转公 3公私合办 4 其他)
    urbanRuralCode: string; // 城乡分类码
    universitiesNature: string; // 高校性质(01综合大学,02理工院校...)
    educationalSystem: string; // 学制
    bilingualEducationFlag: boolean; // 是否双语教学
    hostLanguage: string; // 主教学语言码
    assistLanguage: string; // 辅教学语言码
    directRelation: string; // 直属关系
    attachedUnitFlag: boolean; // 是否附属学校(1是0否)
    attachedUnitId: string; // 附属于学校id
    attachedUnit: string; // 附属于学校名称
    buildDate: Dayjs | string; // 建校年月
    schoolDay: Dayjs | string; // 校庆日
    centerFlag: boolean; // 是否为城镇中心学校
    supportingKindergartenFlag: boolean; // 是否配套幼儿园
    recruitStatus: number; // 是否招生(1正常0停止)
    inclusiveFlag: boolean; // 是否普惠性幼儿园
    keySchoolFlag: boolean; // 是否重点学校
    virtualFlag: boolean; // 是否虚拟学校
    minorityBilingual: number; // 少数民族双语教学模式
    ethnicMinorityLanguage: string; // 少数民族双语教学语言
    ethnicMinorityInstitutions: string; // 独立设置少数民族学校
    centreFlag: boolean; // 是否中央部署
    partFlag: boolean; // 是否部属学校
    localLanFlag: boolean; // 是否建立校园网
    profitabilityFlag: boolean; // 是否营利性机构
    status?: number; // 学校状态：0撤销 1正常 2撤并
    revokeDate: Dayjs | string; // 撤销/停办日期
    mergeSchoolId: number; // 撤并到学校ID
    institutionalCode: string; // 机构编码
    creditCode: string; // 统一社会信用代码
    organizationCode: string; // 组织机构代码
    institutionLicenseNumber: string; // 开办许可证号
    institutionUnitId: number; // 开办许可证审批机关id
    institutionUnit: string; // 开办许可证审批机关
    institutionLicenseDate: Dayjs | string; // 许可证颁证日期
    institutionRegisterNumber: string; // 机构登记注册号
    schoolCampusType: number; // 校区分类(0学校1校区)
    campusFlag: boolean; // 是否存在下属校区
    parentSchoolId: number; // 上级学校ID
    parentSchoolName: string; // 上级学校名称
    attachedClassType: string; // 附设班类型
    fullPinyin: string; // 拼音全拼
    simplifiedPinyin: string; // 拼音简拼
    sort: number; // 排序字段
    schoolMasterId: number; // 校长（机构负责人）用户id
    schoolMaster: string; // 校长（机构负责人）姓名 加密
    masterPhone: string; // 校长（机构负责人）电话 加密
    masterIdcard: string; // 校长（机构负责人）身份证 加密
    email: string; // 学校邮箱
    postalCode: string; // 学校邮编
    metadata: Map<string, any>; // 其他参数
    icon: string; // 学校图标
    remarks: string; // 备注
  }
}

/** 查询学校信息分页 */
export function getSchoolPage(
  data: PageParam,
  desensitize: boolean,
  encrypt: boolean,
) {
  return requestClient.post<PageResult<SchoolApi.School>>(
    '/edu/base/school/page',
    data,
    {
      desensitize,
      encrypt,
    },
  );
}
export function getSchoolPageSimple(
  data: PageParam,
  desensitize: boolean,
  encrypt: boolean,
) {
  return requestClient.post<PageResult<SchoolApi.School>>(
    '/edu/base/school/page-simple',
    data,
    {
      desensitize,
      encrypt,
    },
  );
}
/** 查询学校信息详情 */
export function getSchool(id: number, desensitize: boolean) {
  return requestClient.get<SchoolApi.School>(`/edu/base/school/get`, {
    params: {
      id,
    },
    desensitize,
  });
}
/** * 根据登录账号查询学校信息 */
export function getSchoolByLogin(id: number, desensitize: boolean) {
  return requestClient.get<SchoolApi.School>(`/edu/base/school/get-by-login`, {
    params: {
      id,
    },
    desensitize,
  });
}
/** 根据学校ID查询校区简单信息 */
export function getCampusBySchoolId(schoolId?: number) {
  return requestClient.get<SchoolApi.School>(
    `/edu/base/school/get-campus-by-school-id`,
    {
      params: {
        schoolId,
      },
    },
  );
}
/** 新增学校信息 */
export function createSchool(data: SchoolApi.School) {
  return requestClient.post('/edu/base/school/create', data);
}

/** 修改学校信息 */
export function updateSchool(data: SchoolApi.School) {
  return requestClient.put('/edu/base/school/update', data);
}

/** 删除学校信息 */
export function deleteSchool(id: number) {
  return requestClient.delete(`/edu/base/school/delete?id=${id}`);
}

/** 批量删除学校信息 */
export function deleteSchoolList(ids: number[]) {
  return requestClient.delete(
    `/edu/base/school/delete-list?ids=${ids.join(',')}`,
  );
}

/** 导出学校信息 */
export function exportSchool(params: any) {
  return requestClient.download('/edu/base/school/export-excel', { params });
}
